/*
 * taskqueue.cpp
 *
 *  Created on: 2011-5-25
 *      Author: chenl
 */

#include "taskqueue.h"
#include "ps_error.h"
#include "task_wrapper.h"

CTaskQueue::CTaskQueue()
{

}

CTaskQueue::~CTaskQueue()
{

}

CTaskQueue::TaskQueueItr CTaskQueue::FindTask(const CTask& task)
{
	TaskQueueItr itr = taskQueue.begin();
	for (; taskQueue.end() != itr; ++itr)
	{
		if (task == **itr)
		{
			break;
		}
	}
	return itr;
}

int32_t CTaskQueue::DeleteTask(CTask& task)
{
	if (taskQueue.empty())
	{
		return E_PS_TASKNOTFOUND;
	}
	TaskQueueItr itr = FindTask(task);
	if (taskQueue.end() == itr)
	{
		return E_PS_TASKNOTFOUND;
	}
	taskQueue.erase(itr);
#ifdef DEBUG
	itr = FindTask(task);
	assert(taskQueue.end() == itr);
#endif
	return S_OK;
}

int32_t CTaskQueue::MoveTaskToTail(CTask& task)
{
	TaskQueueItr itr = FindTask(task);
	if (taskQueue.end() == itr)
	{
		return E_PS_TASKNOTFOUND;
	}
	taskQueue.erase(itr);
	taskQueue.push_back(&task);
	return S_OK;
}
